# -*- coding: utf-8 -*-
from django.contrib import admin

from frota.enums import Situacao
from datetime import datetime

from frota.models import Veiculo, VeiculoCombustivel, VeiculoCor, VeiculoModelo, VeiculoMarca, VeiculoTipo
from frota.forms import VeiculoForm, VeiculoCombustivelForm, VeiculoCorForm, VeiculoModeloForm, VeiculoMarcaForm
from frota.forms import ViaturaForm, ViagemAgendamentoForm
from frota.models import Viatura, ViagemAgendamento

#admin.site.register(VeiculoMarca)
#admin.site.register(VeiculoModelo)
#admin.site.register(VeiculoCor)
#admin.site.register(VeiculoCombustivel)
#admin.site.register(Veiculo)

###############
### VEICULO ###
###############

admin.site.register(VeiculoTipo)

class VeiculoModeloAdmin(admin.ModelAdmin):
    form = VeiculoModeloForm

admin.site.register(VeiculoModelo, VeiculoModeloAdmin)

class VeiculoCorAdmin(admin.ModelAdmin):
    form = VeiculoCorForm

admin.site.register(VeiculoCor, VeiculoCorAdmin)

class VeiculoCombustivelAdmin(admin.ModelAdmin):
    form = VeiculoCombustivelForm

admin.site.register(VeiculoCombustivel, VeiculoCombustivelAdmin)

class VeiculoMarcaAdmin(admin.ModelAdmin):
    form = VeiculoMarcaForm

admin.site.register(VeiculoMarca, VeiculoMarcaAdmin)

class VeiculoAdmin(admin.ModelAdmin):
    form = VeiculoForm
    search_fields = ('modelo__nome', 'placa', 'cor__nome')
    list_display = ('editar', 'modelo', 'placa', 'lotacao', 'cor')
    fieldsets = [
                 (None, {'fields': ('modelo','cor', 'ano_fabric', 'placa', 'odometro', ('chassi', 'renavam'), 'lotacao', 'consumo_medio', 'potencia', 'cilindrada',
                                    'combustiveis', 'capacidade_tanque','capacidade_gnv', 'obs' 
                                   )}),
                ]
    def editar(self, obj):
        return '<img src="/media/img/16x16/editar.png" title="Editar" />'
    editar.allow_tags = True
    editar.short_description = ''
admin.site.register(Veiculo, VeiculoAdmin)

###############
### VIATURA ###
###############

class ViaturaAdmin(VeiculoAdmin):
    form = ViaturaForm
    editForm = False # utilizado para controlar as apresentações dos campos que não são editáveis

    search_fields = ('modelo__nome', 'placa', 'cor__nome')
    list_display = ('icone_editar', 'modelo', 'placa', 'lotacao', 'get_combustiveis', 'cor', 'tipo', 'status',)
    fieldsets = [
                 (None, {'fields': ('tipo', 'modelo','cor', 'ano_fabric',
                                    'placa', 'lotacao', 'odometro', ('chassi', 'renavam'), 'consumo_medio', 'potencia', 'cilindrada',
                                    'combustiveis', 'capacidade_tanque','capacidade_gnv', 'obs' 
                                   )}),
                ]
    
    def queryset(self, request):
        return Viatura.objects.all() 
    
    def editavel(self, request):
        url = request.META['PATH_INFO']
        info = self.model._meta.app_label, self.model._meta.module_name
        if '%s/%s/add' % info not in url:
            self.editForm = True
        else:
            self.editForm = False
    
    def get_form(self, request, obj=None, **kwargs):
        self.editavel(request)
        form = super(ViaturaAdmin,self).get_form(request, obj=None, **kwargs)
        form.base_fields['status'].widget.attrs['disabled'] = 'disabled'
        
        if self.editForm:
            form.base_fields['odometro'].widget.attrs['readonly'] = 'True'
            form.base_fields['chassi'].widget.attrs['readonly'] = 'True'
            form.base_fields['renavam'].widget.attrs['readonly'] = 'True'
            form.base_fields['capacidade_tanque'].widget.attrs['readonly'] = 'True'
        else:
            if 'disabled' in form.base_fields['odometro'].widget.attrs:
                form.base_fields['odometro'].widget.attrs.pop('readonly')

        return form
    
    def icone_editar(self, obj):
        return '<img src="/media/img/16x16/editar.png" title="Editar" />'
    icone_editar.allow_tags = True
    icone_editar.short_description = ''
    icone_editar.attrs = {'width': '18px'}
    
admin.site.register(Viatura, ViaturaAdmin)

class ViagemAgendamentoAdmin(admin.ModelAdmin):
    form = ViagemAgendamentoForm
    search_fields = ['solicitante__nome']
    list_display = ['icone_editar', 'icone_validar', 'get_data_saida', 'get_data_chegada', 'solicitante']
    fieldsets = [
                 (None, {'fields': ('tipo_viatura', 'solicitante', ('data_saida', 'data_chegada'), 'objetivo')}),
                ]
    
    def icone_editar(self, obj):
        if obj.status == Situacao.PENDENTE:
            return '<img src="/media/img/16x16/editar.png" title="Editar" />'
        else:
            return '<a href="/frota/avaliar_agendamento_viagem/%s/"><img src="/media/img/16x16/informacoes.png" title="Visualizar" /></a>' % (obj.id)
    icone_editar.allow_tags = True
    icone_editar.short_description = ''
    icone_editar.attrs = {'width': '18px'}
    
    def get_data_chegada(self, obj):
        return obj.data_chegada.strftime("%d de %b. de %Y às %H:%M:%S")
    get_data_chegada.allow_tags = True
    get_data_chegada.admin_order_field = 'data_chegada'
    get_data_chegada.short_description = 'Data de Chegada'
    
    def get_data_saida(self, obj):
        return obj.data_saida.strftime("%d de %b. de %Y às %H:%M:%S")
    get_data_saida.allow_tags = True
    get_data_saida.admin_order_field = 'data_saida'
    get_data_saida.short_description = 'Data de Saída'
    
    def icone_validar(self, obj):
        if obj.status == Situacao.PENDENTE:
            if obj.data_saida > datetime.now():
                return '<a href="/frota/avaliar_agendamento_viagem/%s/"><img src="/media/img/16x16/validar.png" title="Avaliar" /></a>' % (obj.id)
            else:
                return '<img src="/media/img/orange-circle.png" title="Pendente - Fora do Prazo" />'
        elif obj.status == Situacao.DEFERIDA:
            return '<img src="/media/img/green-circle.png" title="Deferida" />'
        elif obj.status == Situacao.INDEFERIDA:
            return '<img src="/media/img/red-circle.png" title="Indeferida" />'
        else:
            return '<img src="/media/img/blue-circle.png" title="Situação indefinida" />'
    icone_validar.allow_tags = True
    icone_validar.short_description = ''
    icone_validar.attrs = {'width': '18px'}

admin.site.register(ViagemAgendamento, ViagemAgendamentoAdmin)